<?php

/**
 * 用于检测业务代码死循环或者长时间阻塞等问题
 * 如果发现业务卡死，可以将下面declare打开（去掉//注释），并执行php start.php reload
 * 然后观察一段时间workerman.log看是否有process_timeout异常
 */

//declare(ticks=1);

use AI\IAI;
use \GatewayWorker\Lib\Gateway;

/**
 * 主逻辑
 * 主要是处理 onConnect onMessage onClose 三个方法
 * onConnect 和 onClose 如果不需要可以不用实现并删除
 */
class Events
{


    /**
     * 当客户端连接时触发
     * 如果业务不需此回调可以删除onConnect
     *
     * @param string $client_id 连接id
     */
    public static function onConnect(string $client_id): void
    {
        // 向当前client_id发送注册用的client_id
        Gateway::sendToClient($client_id, "init:zhouyu:wx:$client_id");
    }

    /**
     * 当客户端发来消息时触发
     * @param string $client_id 连接id
     * @param mixed $message 具体消息
     */
    public static function onMessage(string $client_id, mixed $message): void
    {
        // 处理消息逻辑
        $message = json_decode($message, true);
        if (!Events::isWeiXinMessage($message)) {
            return;
        }
        if (!Events::isTextMsg($message)) {
            return;
        }

        // 检查 $content 中是否 @了当前 client_id 对应的微信号
        $userID = IAI::isGroupMsg($message) ? md5($message["sendByNickName"]) : md5($message["talker"]);
        // 根据 $userID 获取对应的 AI
        $ai = IAI::getAI($userID);
        $ai->reply($message, $client_id, $userID);
    }

    /**
     * 当用户断开连接时触发
     * @param string $client_id 连接id
     */
    public static function onClose(string $client_id)
    {
        // 修改数据库状态
    }

    public static function isWeiXinMessage($message): bool
    {
        if (
            isset($message["type"]) && isset($message["talker"])
            && isset($message["content"]) && isset($message["msgId"])
        ) {
            return true;
        }
        return false;
    }

    public static function isTextMsg($message): bool
    {
        return isset($message["type"]) && $message["type"] == 1;
    }



    public static function logMsg($content)
    {
//        $content = json_encode($content,JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
        file_put_contents("/www/wwwroot/xhelper.zhouxiaoyu.vip/log.txt", $content, FILE_APPEND);
    }


}
